/***********************************************************
 *  File_Name  : XJList.h
 *  File_Path   :
 *  File_Encode : UTF8
 *  Description :
 *
 *  OS : Linux, UNIX
 *  LastVersion  : 20150128
 *
 *  Author      : LiXiujie(李秀杰)
 *  Date        : 2015-1-28
 *  Version     : 20150128
 *  Description :
 *
 *  Edit Author :
 *  Edit Date   :
 *  Version     :
 *  Description :
 *
 ***********************************************************/
#ifndef XJLIST_H_
#define XJLIST_H_

namespace XJUtilClass {

typedef struct _XJListNode{
	void *pData;
	struct _XJListNode *pPrev;
	struct _XJListNode *pNext;
	void *pList; // XJList
}XJListNode;

class XJList {
public:
	XJList();
	virtual ~XJList();
	int Size();
	void *Front();
	void *Back();
	void PopFront();
	void PopBack();
	void Clear();
	void PushFront(void *pData);
	void PushBack(void *pData);
	void Destroy();

	XJListNode* NodeBegin();
	XJListNode* NodeEnd();

	XJListNode* NodePrev(XJListNode *pListNode);
	XJListNode* NodeNext(XJListNode *pListNode);
	void* NodeData(XJListNode *pListNode);

	XJListNode* NodeErase(XJListNode *pListNode);
	XJListNode* NodeAfterInsert(XJListNode *pListNode, void *pData);
	XJListNode* NodeBeforeInsert(XJListNode *pListNode, void *pData);
protected:
	XJListNode *pHead;
	XJListNode *pTail;
	int nCount;
};

} /* namespace XJUtilClass */

#endif /* XJLIST_H_ */
